def create_gbk_csv_table(first_byte_range=(0xB0, 0xD7), tail_byte_range=(0xA1, 0xFE), 
                        exclude_bytes={0x7F}, output_file="gbk_encoding_table.csv"):
    """
    创建GBK编码的CSV表格
    Y轴: 第一个字节 (行标题)
    X轴: 第二个字节 (列标题)
    表格单元格: 合法字符
    """
    
    first_start, first_end = first_byte_range
    tail_start, tail_end = tail_byte_range
    
    print("正在生成GBK编码CSV表格...")
    print(f"Y轴(行): 第一个字节范围 0x{first_start:02X}-0x{first_end:02X} ({first_start}-{first_end})")
    print(f"X轴(列): 第二个字节范围 0x{tail_start:02X}-0x{tail_end:02X} ({tail_start}-{tail_end})")
    print(f"输出文件: {output_file}")
    
    # 收集有效的编码数据
    encoding_map = {}
    valid_count = 0
    
    # 扫描所有可能的编码组合
    for first_byte in range(first_start, first_end + 1):
        for tail_byte in range(tail_start, tail_end + 1):
            if tail_byte in exclude_bytes:
                continue
                
            try:
                byte_sequence = bytes([first_byte, tail_byte])
                character = byte_sequence.decode('gbk')
                
                if first_byte not in encoding_map:
                    encoding_map[first_byte] = {}
                encoding_map[first_byte][tail_byte] = character
                valid_count += 1
                
            except UnicodeDecodeError:
                pass
            except Exception:
                pass
    
    # 获取所有有效的第二个字节值（列标题）
    all_tail_bytes = set()
    for fb_data in encoding_map.values():
        all_tail_bytes.update(fb_data.keys())
    tail_bytes_sorted = sorted(all_tail_bytes)
    
    # 获取所有有效的第一个字节值（行标题）
    first_bytes_sorted = sorted(encoding_map.keys())
    
    # 创建CSV内容
    csv_lines = []
    
    # 添加文件头信息
    csv_lines.append("# GBK编码表格")
    csv_lines.append(f"# Y轴(行): 第一个字节范围 0x{first_start:02X}-0x{first_end:02X}")
    csv_lines.append(f"# X轴(列): 第二个字节范围 0x{tail_start:02X}-0x{tail_end:02X}")
    csv_lines.append(f"# 有效字符数量: {valid_count}")
    csv_lines.append("")
    
    # 创建列标题行
    header = "第一个字节\\第二个字节"
    for tail_byte in tail_bytes_sorted:
        header += f",0x{tail_byte:02X}({tail_byte})"
    csv_lines.append(header)
    
    # 创建数据行
    for first_byte in first_bytes_sorted:
        row = f"0x{first_byte:02X}({first_byte})"
        for tail_byte in tail_bytes_sorted:
            if tail_byte in encoding_map[first_byte]:
                character = encoding_map[first_byte][tail_byte]
                row += f",{character}"
            else:
                row += ","  # 空单元格
        csv_lines.append(row)
    
    # 写入文件
    try:
        with open(output_file, 'w', encoding='utf-8') as f:
            f.write('\n'.join(csv_lines))
        print(f"成功生成CSV文件: {output_file}")
        print(f"表格大小: {len(first_bytes_sorted)}行 × {len(tail_bytes_sorted)}列")
        
    except Exception as e:
        print(f"写入文件时出错: {e}")
        # 在控制台输出CSV内容
        print("\nCSV内容预览:")
        for line in csv_lines[:10]:  # 只显示前10行预览
            print(line)
        if len(csv_lines) > 10:
            print("... (更多内容已写入文件)")

# 主程序
if __name__ == "__main__":
    print("GBK编码CSV表格生成器")
    print("Y轴: 第一个字节, X轴: 第二个字节")
    print("输出格式: CSV (逗号分隔)")
    print()
    
    # 生成完整的CSV表格
    create_gbk_csv_table(
        first_byte_range=(0x81, 0xFE),  # 第一个字节范围
        tail_byte_range=(0x40, 0xFE),   # 第二个字节范围
        output_file="gbk_full_table.csv"
    )